package org.nf.trading.service.app.product;

import com.github.pagehelper.PageInfo;
import org.nf.trading.dto.ProductCommentDTO;
import org.nf.trading.entity.Product;
import org.nf.trading.service.es.document.product.ProductDoc;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.concurrent.atomic.AtomicLong;


public interface ProductService {
    /**
     * 通过用户id查询发布的商品
     * @param uid
     * @return
     */
    List<Product> listProductsByUid(Integer uid);

    /**
     * 文件上传
     *
     * @param path  桶下面的子目录
     * @param files
     * @return
     */
    boolean fileUpload(String path, MultipartFile[] files,Product product);


    /**
     * 通过商品状态查询全部商品
     *
     * @param status
     * @return
     */
    List<Product> getProductByStatus(Integer status);

    /**
     * 通过商品分类详细id查询全部商品
     *
     * @param productTypeDetailId
     * @return
     */
    List<Product> getProductByTypeDetailId(Integer productTypeDetailId);

    /**
     * 分页查询全部商品
     *
     * @return
     */
    PageInfo<Product> selectAll(Integer pageNum, Integer pageSize);

    /**
     * 通过名称查询全部商品
     *
     * @param productName
     * @return
     */
    List<ProductDoc> getProductByName(String productName, Integer pageNum, Integer pageSize);

    /**
     * 发布商品
     *
     * @param product
     * @return
     */
    boolean saveProduct(Product product,MultipartFile[] files);

    /**
     * 通过id查询商品(包含发布者信息)
     *
     * @param productId
     * @return
     */
    ProductCommentDTO getProductById(Integer productId);

    /**
     * 通过id查询商品（包含发布者和评论回复的级别回复）
     * @param productId
     * @return
     */
    ProductCommentDTO secondLevelComments(Integer productId);

    /**
     * 多条件动态查询 + 分页
     * @param pageNum
     * @param pageSize
     * @param product
     * @return
     */
    PageInfo<Product> selectAllProduct(Integer pageNum,Integer pageSize,Product product);


    /**
     * 查询商品的评论信息数量
     *
     * @param pid
     * @return
     */
    AtomicLong productCommentNum(Integer pid);

}
